<html xmlns="http://www.w3.org/1999/xhtml" id="architecture"
      xmlns:d="docbook">
<head>
    <title>アーキテクチャ概要</title>
　<othercredit role="translator">
	<firstname>Shinichiro</firstname>
	<surname>Oka</surname>
        <contrib>2005/04/12　翻訳初版</contrib>
  </othercredit>
  <othercredit role="translator">
 	<firstname>Manabu</firstname>
	<surname>Togawa</surname>
        <contrib>2005/12/09　3.1対応。HTML化。</contrib>
  </othercredit>
</head>
<body>

<h1>Laszlo アーキテクチャ</h1>

<p>OpenLaszlo3.0はリッチ・インターネット・アプリケーションを簡単に開発、配置するためのプラットフォームです。
OpenLaszloのシステムアーキテクチャは、ウェブアプリケーションのもつ管理性の高さとコスト効果、クライアント/サーバー型アプリケーションのもつ使いやすさと能力の両方を併せ持っています。
</p>
<h2>配置モード</h2>
<p>
LaszloアプリケーションはWEB上のみで利用でき、次の二つの方法のどちらかで<i>配置</i>されます。
</p>
<ul>
   <li><em>プロキシモード:</em> OpenLaszloサーバーがサーバーマシン上で動作し、 
     <ul>
      <li>必要に応じてソースプログラムをコンパイルし、クライアント上で実行するバイナリファイルを送信します。</li>
      <li>クライアントとインターネット上の他のサーバーと相互通信を仲介し、必要に応じてデータ操作を行います。</li>
     </ul>
   </li>
   <li><em>SOLOモード:</em>OpenLaszloコンパイラーをプログラムの"事前コンパイル"のために使い、サーバー上に配置するためのバイナリを作成します。クライアント上で実行される時、このアプリケーションはOpenLaszloサーバーの仲介なしに、他のサーバーと直接通信します。これはサーバレス、または<i>スタンドアロンOpenLaszloアウトプット(Standalon OpenLaszlo Output</i>配置と呼ばれます。</li>
</ul>
<p>
以降の章でプロキシとSOLOのLaszloアプリケーションの違いを詳細に説明しています。一般的に、
</p>

<ul>
	<li><em>プロキシモード</em> アプリケーションはSOLOアプリケーションでは実現できないいくつかのことを実現できます。しかし、SOLOよりも配置に手間がかかり、パフォーマンスが低下する場合もあります。</li>
	<li><em>SOLOモード</em>アプリケーションの配置は簡単で、場合によってより高いパーフォーマンスを示します。</li>
</ul>
<p>多くの場合、配置の準備ができるまでどちらの配置モードを利用するかを決定する必要はありません。通常はSOLOモードを選択するでしょう。以降の解説を読む前に、静的（SOLOモード）にアプリケーションを配置する場合、メディア変換や、永続的な接続マネージャといったOpenLaszloサーバーの実行時機能が使えないことを覚えておいてください。
</p>
<h2>クライアントとサーバーの概要</h2>
<p>
OpenLaszloサーバーはJ2EEサーブレットコンテナ内で動作するJavaアプリケーションです。
OpenLaszloサーバーは数多くのプロトコルを通して<glossterm>バックエンド</glossterm>サーバーとデータソースの通信を行うことができます。
LZX言語で記述されたLaszloアプリケーションはOpenLaszloサーバーでコンパイルされ、クライアントWEBブラウザ内のプラグインで動作するバイトコードとして送信されます。
これは<dfn>フロントエンド</dfn>を構成します。現在はFlash5以上のプラグインでの動作環境をサポートしており、、Windows、Pocket PC、Mac OS、 Linux、 SolarisといったさまざまなOSや、モバイル端末、セットトップボックス(STB)プラットフォームといった数多くのデバイス上で一貫して確実に動作します。
OpenLaszloサーバーは、Macromedia Flashプレイヤー(バージョン5.0以上)で動作するSWFファイルフォーマットのバイトコードを出力します。しかし、LaszloアーキテクチャがFlashへ依存しているというわけではありません、Laszloは将来的に、もっと幅広く利用できるように他のクライアント実行環境をサポートします。</p>

<p>Laszlo用語では、<dfn>クライアント</dfn>とはユーザーのWEBブラウザで実行されるLZXアプリケーション、<dfn>サーバー</dfn>とは（他のサーバーと通信することもある）OpenLaszloサーバーを意味します。
LZXクライアントとOpenLaszloサーバーはHTTPを通して通信します。OpenLaszloサーバーはバイトコードを送信し、LZXアプリケーションはXMLを送信します。</p>

<p>ストリーミングメディアや通知を含む、すべてのLaszloプラットフォームの機能は、HTTPまたはHTTPSを通じて通信されており、これによりLaszloベースのアプリケーションは通常の企業用ファイヤーウォールとの親和性を保ちます。これは公開されたインターネットアプリケーションにとって必須の機能です。</p>

<img class="illustration" src="images/architecture-1.gif"
     title="Laszloクライアント/サーバーアーキテクチャ"/>

<h2>Laszoサーバーアーキテクチャ</h2>

<p>
OpenLaszloサーバーは、標準J2EEアプリケーションサーバーまたは、JRE1.3以上のJavaサーブレットとして動作します。
これらのアプリケーションサーバー環境はOpenLaszloサーバーと同様に高い拡張性があります。Laszloアプリケーションはこれらのサーバー製品がサポートするすべてのOSで動作します。LaszloはWindows、Solaris、Linux、Mac OS Xサーバー環境をサポートしています。</p>

<p>OpenLaszloサーバーは大きく次にあげる5つのサブシステムから成り立っています。</p>

<ul>
   <li><glossterm>インターフェース・コンパイラ</glossterm></li>
   <li><glossterm>メディア・トランスコーダー^</glossterm></li>
   <li><glossterm>データマネージャ</glossterm></li>
   <li><glossterm>永続コネクションマネージャ</glossterm></li>
   <li><glossterm>キャッシュ</glossterm></li>
</ul>

<img class="illustration" src="images/architecture-2.gif"
     title="Laszloサーバーアーキテクチャ"/>
<fixme>
The above is an illustration of proxied delployment. There will be an illustration of nonproxied deployment in the 
final 3.0. Release.
</fixme>
<h3>インターフェイスコンパイラ</h3>

<p><glossterm>インターフェイスコンパイラ</glossterm>は<glossterm>LZXタグコンパイラ</glossterm>と<glossterm>スクリプトコンパイラ</glossterm>から構成されています。
加えて、インターフェイスコンパイラはメディアとデータソースをコンパイルし<glossterm>埋め込む</glossterm>ため、メディアコンパイラーとデータマネージャを実行します。</p>

<p>LZXタグ・スクリプトコンパイラーはLaszloアプリケーションとして記述されたタグとJavaScriptを、Laszloクライアント環境へ送信するため、実行可能な(swf)バイトコードへ変換します。
このバイトコードはキャッシュされ、ここからクライアントへ送信されます。どのようにアプリケーションが呼び出されるかによって、.swfファイルか、.swfオブジェクトが埋め込まれたHTMLファイルが送信されます。</p>

<p>
メディアトランスコーダーはあらゆるメディアを、Laszloが対象とするクライアントエンジン内でレンダリングするための一つのフォーマットへ変換します。
これによりLaszloアプリケーションは、多数の補助アプリケーションや追加の再生用ソフトウェアを必要とせずに、同一のキャンバス内に、統一された方法でサポートされているメディアタイプを表示させることができます。</p>

<p>メディアトランスコーダーは自動的に次のメディアタイプを変換します。JPEG、GIF、PNG、MP3、TrueType、SWF (画像/アニメーションのみ)。</p>

<h3>データマネージャ</h3>

<p>
データマネージャはあらゆるデータを、Laszloアプリケーションが読み込み可能である圧縮済みのバイナリフォーマットへ変換するためのデータコンパイラーと、LaszloアプリケーションがXML/HTTP経由でデータを取得するためのデータコネクタ群から成っています。これにより、Laszloアプリケーションはネットワークを介して、データベース、XML WEBサービス、WEBサーバーベースのファイルやプログラムと接続することができます。</p>

<h3>永続的コネクションマネージャ</h3>

<p>
永続コネクションマネージャはLaszloアプリケーションが要求する認証とリアルタイムメッセージを扱い、リアルタイムのメッセージと通知（HTTPを通したデータプッシュ）機能を提供します。</p>

<warning>
この機能は暫定的な機能です。小規模な状況では動作し、開発にも適していますが、（小容量かつ重要でない配置を例外として）この機能を使った配置はお勧めできません。このバージョンの永続コネクションを使ったアプルケーションの堅牢性について質問があればLaszloへ直接ご相談ください。</warning>

<h3>キャッシュ</h3>
<p>キャッシュはすべてアプリケーションの最新のコンパイルを保持します。Laszloアプリケーションが初めてリクエストされた時にコンパイルされ、作成されたSWFファイルがクライアントへ送信されます。同時にコピーがサーバーでキャッシュされるため、以降のリクエストではコンパイルを待つ必要はありません。</p>


<h2>Laszloクライアントアーキテクチャ</h2>

<p>
Laszloのクライアントアーキテクチャは、Laszlo基本クラスから成ります。これはすべてのLaszloアプリケーションにコンパイルインされるコアライブラリであり、（タイマーやアイドリング関数といった）ランタイムサービスと、2Dグラフィックレンダリング、サウンド再生機能を提供します。
しかし、これらのクラスはFlashサービスやFlashオブジェクトに依存していません。Flashプレイヤーは単にレンダリングエンジンとして用いられます。</p>

<img class="illustration" src="images/architecture-3.gif"
     title="Laszloクライアントアーキテクチャ"/>


<example title="空のアプリケーション" extract="false">&lt;canvas/&gt;</example>

<p>
このアプリケーションが実行されると、たとえ、&quot;何もしていない&quot;にかかわらずサーバーとの通信を保持し、LZXアプリケーションの実行に必要なすべての機能が含まれています。</p>
<p>
Laszlo基本クラスには次の主要な4つのコンポーネントがあります。イベントシステム、データローダー/バインダー、レイアウト&amp;アニメーションシステム、アプリケーションサービス一式。</p>

<h3>イベントシステム</h3>

<p>イベントシステムはユーザーのマウスクリックやサーバーのデータプッシュといったアプリケーションイベントを受けとり、処理します。このコンポーネントにより標準的なイベント駆動型プログラミングを可能にします。従来のWEBアプリケーションに比べ、あらゆるアプリケーションの状態にわたってクライアントサイドでのソート、処理、検証、動的な表示を行うことのできるLaszloアプリケーションは、ホストサーバーの処理負荷を大幅に下げることができます。</p>

<h3>データローダー/バインダー</h3>

<p>データローダーはデータトラフィックの管理者であり、ネットワークを通してOpenLaszloサーバーからのデータを受け取り、テキストフィールド、フォーム、メニューアイテムといった適切な表示要素にデータをバインドします。</p>

<h3>レイアウトとアニメーションシステム</h3>

<p>レイアウトとアニメーションシステムはLaszloアプリケーションへ、インターフェース要素の<glossterm>制約ベース</glossterm>画面レイアウトと、インターフェースの状態変更に対する<glossterm>アリゴリズム的アニメーション</glossterm>を提供します。このコンポーネントによって最小限のプログラミングで動的なアプリケーションインターフェイスを構築できます。これにより多数のインターフェイス要素を相対的・絶対的どちらでもピクセルの位置指定で配置できます。アニメーションアリゴリズムを用いれば、動きのある画面要素の更新表示ができ、アプリケーションの状態変化をユーザーへ明確に伝えることができます。</p>

<h3>Laszloサービスシステム</h3>

<p>
Laszloランタイムは、タイマー、サウンド、モーダルダイアログをサポートしています。
</p>


<h2>OpenLaszloサーバー経由Laszloアプリケーションのデータフロー</h2>

<p>ここでは例としてサーバーに格納されている<code>weather.lzx</code>Laszloアプリケーションを用います。次にどのようにこのアプリケーションがOpenLaszloサーバーによって実行されるか図示し説明します。</p>

<img class="illustration" src="images/architecture-5.gif"
     title="お天気アプリケーションのLaszloアプリケーションデータフロー図"/>

<p>この図は、ユーザーがURLを入力してお天気アプリケーションを呼び出すところからはじまり、XMLWEBサービスからデータを取得し、結果をクライアントへ送信するといった、クライアント-サーバー間の一連のデータの流れを説明しています。</p>

<p>
Laszloアプリケーションにおいて、プレゼンテーションロジックはビジネスロジックから分離されており、クライアント上でローカルに実行されます。
Laszloサーバーはテキストではなく、圧縮されたバイナリデータをクライアントへ送信し、HTMLベースなどのWEBアプリケーションと比べ、大幅にデータ量を削減します。サーバー側、クライアント側両方でキャッシュを活用し、不必要なコードの実行やデータ通信を行いません。</p>

<h2>セキュリティモデル</h2>

<p>
LaszloアプリケーションプラットフォームはSSLセキュリティモデルをサポートしています。Laszloのデータ通信はHTTPS上のSSLで暗号化することができます。Laszloアプリケーションは、クライアントコンピューター上でセキュアなFlashプレイヤーの&quot;サンドボックス&quot;環境内で実行され、ローカルファイルシステムへの書き込みや、クライアントのネイティブ環境へアクセスすることはできません。</p>

<p>
Laszloアプリケーションによって利用されるWEBサービスとデータベースもまた、事前ユーザー認証モデルによって安全を確保されます。このメカニズムはセキュアでないサービスやデータへのプロキシやゲートウェイとしてOpenLaszloサーバーを利用されることを防止します。</p>

<h2>複数デバイスへプラットフォームのサポート</h2>

<p>
Laszloアーキテクチャはさまざまなデバイスの種類をサポートするよう設計されています。
動的なレイアウトメカニズムはアプリケーション全体のサイズといったようなプロパティをプラットフォームが自動的に変更することを可能にしています。これによって異なる大きさの画面やデバイス上でのアプリケーションの実行を簡易化します。</p>

<p>
すべてのLaszloの画面表示は、フレームベースのアニメーションではなく、時間ベースを採用しています。このことによって、さまざまなデバイスの種類による処理速度の違いを意識させず適切に表示します。
あるインターフェースを500msで遷移するよう設定すれば、表示されたフレームの数に関わらず500msで遷移します。&#x2014;高速なプロセッサならより多いフレームを使いよりなめらかにアニメーションされますが&#x2014;遷移にかかる時間は同じです。
</p>

<fixme>incorporate swf that shows how amazon.lzx works.</fixme>
<fixme>note on above: not clear that we want to incorporate a swf here.  Included as a "maybe" for after Bonanza.</fixme>

</body>
</html>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
* Copyright 2001-2004 Laszlo Systems, Inc.  All Rights Reserved.              *
* Use is subject to license terms.                                            *
* X_LZ_COPYRIGHT_END ****************************************************** -->
